<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var i = 10;
        var j = i;
        i++;
        console.log(i);//11
        console.log(j);//10

        //基本类型与引用类型不一样
        var ns1 = [100, 200, 300];
        var ns2 = ns1;
        ns1[0]++;
        console.log(ns1[0]);//101
        console.log(ns2[0]);//101

        var obj1 = { count: 1 };
        var obj2 = obj1;
        obj1.count++;
        console.log(obj1.count);//2
        console.log(obj2.count);//2


        //形参是基本数据类型
        function inc(num) {
            console.log('传递参数后，形参num', num);//10
            num++;
            console.log('形参改变后，形参num', num);//11
        }
        var real = 10;
        console.log('调用前，实参real', real)//10
        inc(real);
        console.log('调用后，实参real', real)//10

        //形参的改变不会影响实参
        // ①当引用类型的对象作为函数的参数时，可以通过形参改变实参的属性值
        //形参是引用类型
        function inc2(obj) {
            console.log('传递参数后，形参obj.cnt', obj.cnt);//10
            obj.cnt++;
            console.log('形参改变后，形参obj.cnt', obj.cnt);//11
        }
        var tmp = { cnt: 10 }
        console.log('调用前，实参tmp.cnt', tmp.cnt)//10
        inc2(tmp);
        console.log('调用后，实参tmp.cnt', tmp.cnt)//11

        // ②但当形参引用到另一个对象时，实参还是引用原来的对象
        function inc3(obj) {
            console.log('传递参数后，形参obj.cnt2', obj.cnt);//10
            // obj.cnt++;
            //形参的改变不影响实参
            obj = new Object();
            obj.cnt = 200;
            console.log('形参改变后，形参obj.cnt2', obj.cnt);//200
        }
        var tmp = { cnt: 10 }
        console.log('调用前，实参tmp.cnt2', tmp.cnt)//10
        inc3(tmp);
        console.log('调用后，实参tmp.cnt2', tmp.cnt)//10
    </script>
</body>

</html>